package com.suian.spring.template.abstractTest;

abstract class BeverageTemplate {
    //定制制作饮料的算法
    public final void prepareBeverage() {
        boilWater();
        brew();
        pourInCup();
        if (customerWantsCondiments()) {
            addCondiments();
        }
    }
    //具体方法烧水
    private void boilWater() {
        System.out.println("烧水");
    }

    //抽象方法，冲泡饮料，由子类实现
    abstract void brew();

    //具体方法、倒入杯子
    private void pourInCup() {
        System.out.println("倒入杯子");
    }

    //抽象方法，添加饮料，由子类实现
    abstract void addCondiments();

    //钩子方法，子类可以选择重写，决定是否添加调料
     boolean customerWantsCondiments() {
        return true;
    }


}
